[小ネタ] CodeCommit 承認ルールの承認プール メンバーにIAMロールを加える場合、ロール名だけではダメ

[小ネタ] CodeCommit 承認ルールの承認プール メンバーにIAMロールを加える場合、ロール名だけではダメ

CodeCommit Tips
Clock Icon2020.10.01

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

大阪オフィスの川原です。

AWS CodeCommitではプルリクエストに承認ルールを付与することが出来ます。 承認ルールを作成することで、一定数以上の承認 もしくは 特定のユーザー/ロールの承認を得た場合のみ マージできるような仕組みを作ることができます。

承認ルール、および承認ルールテンプレートについて詳細は以下参照ください。

結論

「特定のIAMロールからの承認」をマージ可能の条件としたいケースを考えます。

このとき以下組み合わせの承認プールでは ダメです

  • 承認者のタイプ :: IAM user name or assumed role
  • 値 :: IAMロール名のみ

img

img

▲ "例" を見る限りできそうなのに・・・

以下のように ワイルドカード を指定するか、 ロール名/スイッチ元ユーザー名 としないといけません。

  • SomeReviewer/* (ロール名 + ワイルドカード)
  • */cm-kawahara.masahiro (ワイルドカード + スイッチ元 ユーザー名)
  • SomeReviewer/cm-kawahara.masahiro (ロール/スイッチ元 ユーザー名)

試してみる

img

上記環境で試してみます。

IAMユーザー cm-kawahara.masahiro から IAMロール SomeReviewer にスイッチロールして、 CodeCommit プルリクエストを承認するケースです。

承認ルールとして 4パターン試してみました。

承認ルール名 承認プールのメンバー 備考
BothName SomeReviewer/cm-kawahara.masahiro ロール名/スイッチ元ユーザー名
OnlyRoleName SomeReviewer ロール名のみ
OnlyUserName cm-kawahara.masahiro スイッチ元ユーザー名のみ
WildcardRoleName SomeReviewer/* ロール名とワイルドカード
WildcardUserName */cm-kawahara.masahiro スイッチ元ユーザー名とワイルドカード

結果は以下の通り。 ロール名/スイッチ元ユーザー名 とワイルドカードを使ったルールはルールを満たしましたが、 ロール名 or スイッチ元ユーザー名のみの承認ルールは条件を満たしていません

img

なぜか

承認ルールに関するAWSドキュメントはこちら

This option would not recognize an active session of someone assuming the role of CodeCommitReview with a role session name of Mary_Major ( arn:aws:sts::123456789012:assumed-role/CodeCommitReview/Mary_Major ) unless you include a wildcard ( *Mary_Major ). You can also specify the role name explicitly ( CodeCommitReview/Mary_Major ).

つまり、ロールのARNが arn:aws:sts::123456789012:assumed-role/CodeCommitReview/Mary_Major の場合 CodeCommitReview だけではダメで、 ワイルドカードを使って *Mary_Major とするか、 厳密に CodeCommitReview/Mary_Major としないといけないです。

IAMロールのARNについて

ちなみに IAMロールの ARNは以下構文です (参照: IAM 識別子 | AWSドキュメント)。

arn:aws:sts::account-id:assumed-role/role-name/role-session-name

ここの role-name/role-session-name の部分を CodeCommit 承認ルールでチェックしているわけですね。

role-name はそのままで、スイッチロールする際のスイッチ先ロールの名前です。

role-session-name はスイッチロール(AssumeRole)する際のパラメータの 1つで、セッション名を指定します。 マネジメントコンソール上でスイッチロールした際はこの値は スイッチ元のIAMユーザー名 になります。

以上、 ロール名/スイッチ元ユーザー名 としないといけない理由でした。

おわりに

小ネタですが、承認ルールの承認プール メンバーにIAMロールを加える場合の注意点を書いてみました。

少しでもどなたかのお役に立てば幸いです。

参考

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.